package com.cool.shark.controller;

import com.cool.shark.pojo.dto.BannerDTO;
import com.cool.shark.pojo.dto.BannerDeleteDTO;
import com.cool.shark.pojo.dto.BannerEnableDTO;
import com.cool.shark.pojo.vo.BannerStandardVO;
import com.cool.shark.pojo.vo.BannerVO;
import com.cool.shark.service.BannerService;
import com.cool.shark.web.JsonResult;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @Name: BannerController
 * @Author: 西风残叶
 * @Date: 2024/4/11 18:18
 * @Version: 1.0
 * @TODO: TODO
 */
@RestController
@Slf4j
@Api(tags = "轮播图管理")
@RequestMapping("/banner")
public class BannerController {
    @Autowired
    private BannerService service;

    /**
     * 实现查询轮播图列表的功能。
     * <p>
     * 该接口不需要接收任何参数，通过调用service层的list方法获取轮播图列表，
     * 并将获取的结果返回给前端。
     *
     * @return JsonResult<List < BannerVO>> 包含轮播图列表的JSON结果对象，
     * 列表存储在JSON结果对象的data字段中。
     */
    @GetMapping("/list")
    public JsonResult<List<BannerVO>> list() {
        // 调用服务层方法，获取轮播图列表
        List<BannerVO> list = service.list();
        // 记录查询轮播图列表成功的日志
        log.info("查询轮播图列表成功，结果为：{}", list);
        // 返回查询结果
        return JsonResult.ok(list);
    }

    /**
     * 插入一个新的Banner信息到数据库。
     *
     * @param banner 包含要插入的Banner信息的对象。
     * @return 返回一个表示操作结果的JsonResult对象，如果操作成功，返回状态码为200的OK结果。
     */
    @PostMapping("/insert")
    public JsonResult<Void> insert(@RequestBody BannerDTO banner) {
        log.info("插入新的Banner信息，参数为：{}", banner);
        // 调用服务层方法，插入banner信息
        service.insert(banner);
        // 返回成功操作的结果
        return JsonResult.ok();
    }

    /**
     * 修改Banner的状态，使其启用或禁用。
     *
     * @param bannerDTO 包含Banner的ID和状态信息的数据传输对象。其中，
     *                  bannerDTO.getId() 代表要修改的Banner的ID，
     *                  bannerDTO.getEnable() 代表要设置的状态，1为启用，非1为禁用。
     * @return 返回一个表示操作结果的JsonResult<Void>对象，如果操作成功，则ok()方法返回true。
     */
    @PostMapping("/changeEnable")
    public JsonResult<Void> changeEnable(@RequestBody BannerEnableDTO bannerDTO) {
        log.info("修改Banner状态，参数为：{}", bannerDTO);
        // 根据传入的bannerDTO中的enable值，调用相应的方法修改banner的状态
        if (bannerDTO.getEnable() == 1) {
            service.setEnable(bannerDTO.getId());
        } else {
            service.setDisable(bannerDTO.getId());
        }
        return JsonResult.ok();
    }

    /**
     * 通过启用状态查询Banner列表
     *
     * @return JsonResult<List < BannerVO>> 返回查询结果的JsonResult对象，其中包含启用的Banner列表
     */
    @GetMapping("/ListByEnable")
    public JsonResult<List<BannerVO>> listByEnable() {
        log.info("查询启用的Banner列表");
        // 调用服务层方法获取启用的banner列表
        List<BannerVO> list = service.listByEnable();
        log.info("查询启用的Banner列表成功，结果为：{}", list);
        // 返回查询结果
        return JsonResult.ok(list);
    }

    /**
     * 删除Banner信息
     *
     * @param id 包含删除信息的Banner数据传输对象，通过RequestBody接收前端传来的JSON数据
     * @return JsonResult<Void> 删除操作的结果，如果成功则返回一个空的JsonResult对象
     */
    @GetMapping("/delete")
    public JsonResult<Void> delete(@Param("id")Integer id) {
        log.info("删除Banner，参数为：{}", id);
        // 调用服务层方法，执行删除操作
        service.delete(id);
        // 返回删除成功的结果
        return JsonResult.ok();
    }
}
